<template>
  <div>
    <vxe-table
      border
      show-footer
      :row-config="{ isCurrent: true }"
      :column-config="{ isCurrent: true }"
      :footer-method="footerMethod"
      :data="demo.tableData"
      :menu-config="demo.tableMenu"
      @menu-click="contextMenuClickEvent"
    >
      <vxe-column type="seq" width="60"></vxe-column>
      <vxe-column field="name" title="Name" sortable></vxe-column>
      <vxe-column field="sex" title="Sex"></vxe-column>
      <vxe-column field="age" title="Age"></vxe-column>
      <vxe-column field="address" title="Address"></vxe-column>
    </vxe-table>
  </div>
</template>
<script lang="ts" setup>
  import { VXETable, VxeTableEvents, VxeTablePropTypes } from 'vxe-table';
  import { ref } from 'vue';
  // import XEClipboard from 'xe-clipboard';
  const demo = ref({
    tableData: [
      { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
      { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
      { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
      { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 36, address: 'Guangzhou' },
      { id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 24, address: 'Shanghai' },
      { id: 10006, name: 'Test6', role: 'Designer', sex: 'Man', age: 34, address: 'test abc' },
    ],
    tableMenu: {
      className: 'my-menus',
      header: {
        options: [[{ code: 'exportAll', name: '导出所有.csv' }]],
      },
      enabled: true,
      body: {
        options: [
          [
            {
              code: 'copy',
              name: '复制',
              prefixIcon: 'vxe-icon-question-circle-fill',
              className: 'my-copy-item',
            },
          ],
          [
            { code: 'remove', name: '删除', prefixIcon: 'vxe-icon-question-circle-fill color-red' },
            {
              name: '筛选',
              children: [
                { code: 'clearFilter', name: '清除筛选' },
                { code: 'filterSelect', name: '按所选单元格的值筛选' },
              ],
            },
            {
              code: 'sort',
              name: '排序',
              prefixIcon: 'vxe-icon-question-circle-fill color-blue',
              children: [
                { code: 'clearSort', name: '清除排序' },
                {
                  code: 'sortAsc',
                  name: '升序',
                  prefixIcon: 'vxe-icon-question-circle-fill color-orange',
                },
                {
                  code: 'sortDesc',
                  name: '倒序',
                  prefixIcon: 'vxe-icon-question-circle-fill color-orange',
                },
              ],
            },
            { code: 'print', name: '打印', disabled: true },
          ],
        ],
      },
      footer: {
        options: [[{ code: 'clearAll', name: '清空数据' }]],
      },
    } as VxeTablePropTypes.MenuConfig,
  });
  const contextMenuClickEvent: VxeTableEvents.MenuClick = ({ menu, row, column }) => {
    switch (menu.code) {
      case 'copy':
        // 示例
        if (row && column) {
          VXETable.modal.message({ content: '已复制到剪贴板！', status: 'success' });
          // if (XEClipboard.copy(row[column.field])) {
          //   VXETable.modal.message({ content: '已复制到剪贴板！', status: 'success' });
          // }
        }
        break;
      default:
        VXETable.modal.alert(`点击了 ${menu.name} 选项`);
    }
  };

  const meanNum = (list: any[], field: string) => {
    let count = 0;
    list.forEach((item) => {
      count += Number(item[field]);
    });
    return count / list.length;
  };

  const footerMethod: VxeTablePropTypes.FooterMethod = ({ columns, data }) => {
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '平均';
        }
        if (['age', 'rate'].includes(column.field)) {
          return meanNum(data, column.field);
        }
        return null;
      }),
    ];
  };
</script>
